#!/usr/bin/env node

import { EcommerceAutomationApp } from '../app.js';
import statisticsService from '../services/statistics.js';
import { cronConfig } from '../config/index.js';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import { readFileSync } from 'fs';

// 获取当前文件目录
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

async function run() {
  // 从配置文件中获取时间范围设置
  const timeRange = cronConfig.refundStatistics.timeRange;
  
  // 使用定时任务服务中的时间计算逻辑
  const { startTime, endTime } = calculateTimeRange(
    timeRange.start,
    timeRange.end
  );
  
  console.log(`正在统计 ${startTime} 到 ${endTime} 期间的退款订单...`);
  
  const app = new EcommerceAutomationApp();
  
  try {
    await app.init();
    await app.createContext('tmall');
    await app.runRefundStatistics(startTime, endTime);
  } catch (error) {
    console.error('统计过程中出错:', error);
  } finally {
    await app.close();
  }
}

/**
 * 计算时间范围（复制自 cron.js 中的逻辑）
 * @param {string} start - 开始时间配置
 * @param {string} end - 结束时间配置
 * @returns {Object} 包含格式化开始和结束时间的对象
 */
function calculateTimeRange(start, end) {
  const now = new Date();
  let startTime, endTime;
  
  // 如果配置的是昨天的完整日期范围
  if (start === '-1d' && end === 'now') {
    // 设置为昨天的00:00:00到今天的00:00:00
    const today = new Date(now);
    today.setHours(0, 0, 0, 0);
    
    endTime = new Date(today);
    startTime = new Date(today);
    startTime.setDate(startTime.getDate() - 1);
  } else {
    // 原有的时间计算逻辑
    // 解析开始时间
    if (start === 'now') {
      startTime = now;
    } else if (start.startsWith('-')) {
      // 相对时间，例如 -24h, -7d
      const match = start.match(/-(\d+)([a-zA-Z])/);
      if (match) {
        const value = parseInt(match[1]);
        const unit = match[2];
        
        startTime = new Date(now);
        switch (unit) {
          case 'h': // 小时
            startTime.setHours(startTime.getHours() - value);
            break;
          case 'd': // 天
            startTime.setDate(startTime.getDate() - value);
            break;
          case 'm': // 分钟
            startTime.setMinutes(startTime.getMinutes() - value);
            break;
          default:
            startTime = new Date(now.getTime() - 24 * 60 * 60 * 1000); // 默认24小时前
        }
      } else {
        // 默认24小时前
        startTime = new Date(now.getTime() - 24 * 60 * 60 * 1000);
      }
    } else {
      // 绝对时间，尝试解析
      startTime = new Date(start) || new Date(now.getTime() - 24 * 60 * 60 * 1000);
    }
    
    // 解析结束时间
    if (end === 'now') {
      endTime = now;
    } else {
      // 尝试解析为绝对时间
      endTime = new Date(end) || now;
    }
  }
  
  // 格式化为指定的字符串格式
  const formatTime = (date) => {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
  };
  
  return {
    startTime: formatTime(startTime),
    endTime: formatTime(endTime)
  };
}

run();